#pragma once

#include "util/vec3.h"

namespace Demo {

class Camera
{
public:
    Camera();
    //Changing camera position
    void shiftRight();
    void shiftLeft();
    void shiftForward();
    void shiftBack();
    void shiftUp();
    void shiftDown();
    //Changing camera direction
    void turnAroundZ(int value);
    void turnAroundX(int value);
    //Zooming camera
    void zoomIn();
    void zoomOut();

    /**
      Refreshes Model-View matrix
      */
    void refresh() const;

    /**
     * @brief unproject window pixel coords to scene 3d coords
     */
    //! TODO: at this moment, 3rd coord (Z) always equal 0 :(
    static vec3d unProject(const vec2d &pixelXY);

private:
    int m_zoomStateIndex;
    double m_x;
    double m_y;
    double m_z;

    double angle_x,angle_z;

    double MOUSE_SENSIVITY,CAMERA_SPEED;
};

} // namespace Demo
